部署 OpenCV


1.更新源

sudo apt-get update

2.安装相关依赖

sudo apt-get install python3 python3-pip python3-dev python3-numpy
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install cmake git pkg-config

3.克隆 OpenCV

git clone https://github.com/opencv/opencv.git

4.部署 OpenCV

方法1:安装 OpenCV 的预编译版本

预编译版本通常会落后于 pip 和 github 的一个版本

sudo apt-get install libopencv-dev python3-opencv

方法2:通过 pip 安装 OpenCV

同时安装基础版和完整版会因命名而冲突,只能二选一安装

若已安装其中一个,需先卸载

pip uninstall opencv-python opencv-contrib-python

基础版(仅核心模块)

带基础功能(如基础图像处理、视频操作等)

pip install opencv-python

如果上面的命令报错,在末尾加上 --break-system-packages 再尝试

pip install opencv-python --break-system-packages

完整版(包含额外模块如 contrib、repository)

需要高级功能(如深度学习模型部署、人脸识别等)

pip install opencv-contrib-python --break-system-packages

方法3:从源代码编译安装

克隆 contrib

git clone https://github.com/opencv/opencv_contrib.git

创建一个构建目录

cd opencv
mkdir build
cd build

运行 cmake 配置

这一步比较慢

cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D INSTALL_C_EXAMPLES=ON \
      -D INSTALL_PYTHON_EXAMPLES=ON \
      -D OPENCV_GENERATE_PKGCONFIG=ON \
      -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
      -D BUILD_EXAMPLES=ON \
      -D WITH_FFMPEG=ON \
      -D WITH_CUDA=OFF \
      -D PYTHON3_EXECUTABLE=$(which python3) \
      -D PYTHON3_INCLUDE_DIR=$(python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \
      -D PYTHON3_LIBRARY=$(python3 -c "import distutils.sysconfig as sysconfig; print(sysconfig.get_config_var('LIBDIR'))") \
      -D PYTHON3_NUMPY_INCLUDE_DIRS=$(python3 -c "import numpy; print(numpy.get_include())") ..

参数说明:

  • CMAKE_BUILD_TYPE:指定构建类型(RELEASE:优化编译;DEBUG:包含调试信息;RELWITHDEBINFO:优化编译但保留调试信息;MINSIZEREL:最小体积)
  • CMAKE_INSTALL_PREFIX:指定 OpenCV 的安装路径
  • INSTALL_C_EXAMPLES:是否安装 C语言 示例代码
  • INSTALL_PYTHON_EXAMPLES:是否安装 Python 示例代码
  • OPENCV_GENERATE_PKGCONFIG:生成 opencv4.pc 文件(供 pkg-config 工具使用)
  • OPENCV_EXTRA_MODULES_PATH:指定 OpenCV 扩展模块(如 SIFT、SURF、DNN 等)的路径
  • BUILD_EXAMPLES:是否编译示例代码
  • WITH_FFMPEG:启用 FFmpeg 支持(用于视频编解码)
  • WITH_CUDA:禁用 CUDA(如需启用需安装 NVIDIA 驱动和 CUDA )
  • PYTHON3_EXECUTABLE:指定 Python 解释器路径
  • PYTHON3_INCLUDE_DIR:指定 Python 头文件路径
  • PYTHON3_LIBRARY:指定 Python 共享库文件
  • PYTHON3_NUMPY_INCLUDE_DIRS:指定 NumPy 头文件路径
  • 编译和安装

    这一步非常慢

    make -j$(nproc)

    安装编译内容

    sudo make install

    更新动态链接器缓存

    sudo ldconfig

    返回用户目录

    cd ~/

    5.验证安装

    如果没有返回错误,并且输出了 OpenCV 的版本号,这表示安装成功

    python3 -c "import cv2; print(cv2.__version__)"

    示例

    在 opencv/samples/python 下已有一些示例

    我们也可以尝试自己写

    进入 opencv 目录

    cd opencv

    示例1:调用摄像头,并生成窗口实时预览

    新建 Camera-Preview.py

    sudo nano Camera-Preview.py

    并添加以下内容

    # 实时捕获摄像头
    
    import numpy as np
    import cv2
    
    # 打开编号 0 的摄像头
    cap = cv2.VideoCapture(0)
    
    while True:
        ret, frame = cap.read()
        frame = cv2.flip(frame, 1) # -1 垂直翻转摄像头
    
        # 彩色视频
        cv2.imshow('frame', frame)
    
        # 黑白视频
        # gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        # cv2.imshow('gray', gray)
    
        k = cv2.waitKey(30) & 0xff
        if k == 27: break # 按 ESC 结束
    
    cap.release()
    cv2.destroyAllWindows()

    按 Ctrl+O 保存,按 Ctrl+X 关闭

    使用 Python3 运行 Camera-Preview.py

    python3 Camera-Preview.py

    可以看到新窗口中能实时预览摄像头

    示例2:实时检测人脸

    新建 FaceDetection.py

    sudo nano FaceDetection.py

    并添加以下内容

    # 实时捕获摄像头并检测人脸
    
    import numpy as np
    import cv2
    
    # 加载人脸检测的 Haar 级联分类器
    face_cascade = cv2.CascadeClassifier('data/haarcascades/haarcascade_frontalface_default.xml')
    
    # 打开编号 0 的摄像头
    cap = cv2.VideoCapture(0)
    
    while True:
        ret, frame = cap.read()
        frame = cv2.flip(frame, 1) # -1 垂直翻转摄像头
    
        # 检测人脸
        faces = face_cascade.detectMultiScale(frame, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
    
        # 在检测到的人脸周围绘制矩形框
        for (x, y, w, h) in faces: cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 3)
    
        # 显示结果图像
        cv2.imshow('frame', frame)
    
        k = cv2.waitKey(30) & 0xff
        if k == 27: break # 按 ESC 结束
    
    cap.release()
    cv2.destroyAllWindows()

    按 Ctrl+O 保存,按 Ctrl+X 关闭

    使用 Python3 运行 FaceDetection.py

    python3 FaceDetection.py

    当检测到人脸后,会在周围绘制矩形框